package org.prophet.accessexcel.service;

import org.prophet.accessexcel.entities.Result;

import java.util.List;

/**
 * @Description: 对Excel中某个Sheet表的增删改查
 * @author: april
 * @date: 2020-10-13 12:55
 */
public interface ExcelCRUD4Sheet<T> {

    /**
     * 查询excel中某个sheet的所有记录行
     *
     * @param sheetNum
     * @return list
     */
    List<T> queryAll4Sheet(int sheetNum);

    /**
     * 查询excel中索引为0的sheet,即第一个sheet
     * @return
     */
    List<T> queryAll4Sheet();

    /**
     * 查询excel中所有sheet包含的记录行
     *
     * @return list
     */
    List<T> queryAll4Excel();

    /**
     * 通过行号查询
     *
     * @param sheetNum 表下标从0开始
     * @param rowId 行号从0开始
     * @return
     */
    T queryByRowId4Sheet(int sheetNum,int rowId);

    /**
     * 通过属性值查询
     * 通过属性名把excel sheet对应列保存到list对象中，然后用属性值和列表项对比，找到则下标为rowid，返回该rowid对应行
     * @param sheetNum
     * @param fieldName  属性名
     * @param fieldValue
     * @return 根据属性值返回对应row
     */
    List<T> queryByFieldValue4Sheet(int sheetNum, String fieldName, Object fieldValue);

    /**
     * 获取指定Sheet中的列名
     * @param SheetNum
     * @return
     */
    List<String> getColumnNames(int SheetNum);

    /**
     * 在当前sheet的行尾追加一行
     *
     * @param sheetNum
     * @param t
     * @return
     */
    Result appendRow2Sheet(int sheetNum, T t);

    /**
     * 在提供的rowid之后插入一行记录，暂时支持在最后一行插入
     *
     * @param sheetNum
     * @param t
     * @param rowId
     * @return
     */
    Result insertRow4Sheet(int sheetNum, T t, int rowId);

    /**
     * 根据rowid，更新对应的row记录
     *
     * @param sheetNum
     * @param t
     * @param rowId
     * @return
     */
    Result updateRowByRowId4Sheet(int sheetNum, T t, int rowId);

    /**
     * 根据rowid删除对饮的行,暂时只支持删除最后一行
     * @param sheetNum
     * @param rowId
     * @return
     */
    int deleteRowByRowId4Sheet(int sheetNum, int rowId);


}
